﻿namespace NetFx.AST
{
  using System;
  using System.Text;
  using System.Collections;
  using System.Collections.Generic;

  using NetFx.SMIL.Definitions;
  using NetFx.SMIL.References;


  /// <summary>
  /// 简单定义
  /// </summary>
  public class SimpleDefinition : ConceptDefinition
  {
    #region Statics
    public static SimpleDefinition it()
    {
      return new SimpleDefinition();
    }
    #endregion
    #region Methods
    public override ConceptPoint Define()
    {
      return _
      [
        //基本模式的定义
        //这些定义用于指导分析器学习特定属性的含义。
        //属性实际上意味着某种形式的信号或者模式，
        //分析器在学习这些模式之后，一旦遇到这类
        //属性，将按照它学到的模式进行转换。

        //可选模式（零个到一个：点）
        //为了获取可选模式，并将可选模式和可选描述符"?"相关联，
        //必须对可选的实际形式和带有"?"属性的某个节点应用
        //并置关系。
        _[_[AnyLiteral, "?"]][_[AnyLiteral], _[NullLiteral]], 

        //重复模式（零个到多个：星）
        //递归模式可以被检测到，这可以用来定义"*"的递归行为。
        _[_[AnyLiteral, "*"]][_[AnyLiteral, "*"], _[NullLiteral]],

        //重复模式（一个到多个：加）
        _[_[AnyLiteral, "+"]][_[AnyLiteral, "*"], _[AnyLiteral]],



        _["ABC"],
        _["DEF"]
      ].Header;
    }
    #endregion
  }


  /// <summary>
  /// CSharp 的ConceptPoint定义。
  /// </summary>
  public class CSharpConceptDefinition:ConceptDefinition
  {
    public override ConceptPoint  Define()
    {
      return null;
    }
  }
}
